package com.zxy.supplier_system.server.entity

import com.zxy.supplier_system.server.service.MarketService
import jakarta.persistence.*

@Entity
class AdministrativeRegion {

    @Column(nullable = false, length = 50)
    lateinit var name: String

    /**
     * 代码共6位，前两位代表省（一级）、中间两位为市/地区（二级），最后两位为区县（三级）
     *  1）省级：前两位有值，后4位置0，如，河北省：130000
     *  2）市/地区：前4四位有值，包含省代码与市代码，最后两位置0，如河北省保定市：130600
     *  3）区县：6位全有值，包含前4位省市代码及区县代码，河北省保定市涿州市：130681
     *  4）直辖市、香港、澳门：
     *       同省级，在行政区划接口（ws/district/v1/list）中，其下直接为区级（没有二级结构填充）
     *       例：北京,东城区 （而非：“北京,北京,东城区”）
     *  5）直辖县：第3、4位为90的，为省直辖县
     *  6）中国范围内，省市区行政区划以外的区域值为999999（如中国东海）
     *  7）东莞市、中山市、儋州市、嘉峪关市 因其下无区县级，因此增加了末位为99代码的同名子级，用于补齐到三级区划的结构
     *
     *
     */
    @Column(unique = true, length = 12)
    @Id
    lateinit var code: String

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn
    var parent: AdministrativeRegion? = null

    @OneToMany(mappedBy = "parent", cascade = [CascadeType.ALL], orphanRemoval = true)
    var children: MutableList<AdministrativeRegion> = mutableListOf()

    var longitude: Double = 0.0

    var latitude: Double = 0.0

    @Column(length = 50)
    lateinit var fullName: String
}

fun AdministrativeRegion.toAdministrativeRegionResponse(): MarketService.MarketDetail.AdministrativeRegionResponse {
    return MarketService.MarketDetail.AdministrativeRegionResponse(this.code, this.name)
}